home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / libxlog.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  6KB  |  165 lines

  1. /*
  2.  * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef LIBXLOG_H
  33. #define LIBXLOG_H
  34.  
  35. #include <xfs/libxfs.h>
  36.  
  37. /*
  38.  * define the userlevel xlog_t to be the subset of the kernel's
  39.  * xlog_t that we actually need to get our work done, avoiding
  40.  * the need to define any exotic kernel types in userland.
  41.  */
  42. typedef struct log {
  43.     xfs_lsn_t    l_tail_lsn;     /* lsn of 1st LR w/ unflush buffers */
  44.     xfs_lsn_t    l_last_sync_lsn;/* lsn of last LR on disk */
  45.     xfs_mount_t    *l_mp;            /* mount point */
  46.     dev_t        l_dev;            /* dev_t of log */
  47.     xfs_daddr_t    l_logBBstart;   /* start block of log */
  48.     int        l_logsize;      /* size of log in bytes */
  49.     int        l_logBBsize;    /* size of log in 512 byte chunks */
  50.     int        l_curr_cycle;   /* Cycle number of log writes */
  51.     int        l_prev_cycle;   /* Cycle # b4 last block increment */
  52.     int        l_curr_block;   /* current logical block of log */
  53.     int        l_prev_block;   /* previous logical block of log */
  54.     int        l_iclog_size;     /* size of log in bytes */
  55.     int        l_iclog_size_log;/* log power size of log */
  56.     int        l_iclog_bufs;     /* number of iclog buffers */
  57.     int        l_grant_reserve_cycle;    /* */
  58.     int        l_grant_reserve_bytes;    /* */
  59.     int        l_grant_write_cycle;    /* */
  60.     int        l_grant_write_bytes;    /* */
  61.     uint        l_sectbb_log;   /* log2 of sector size in bbs */
  62. } xlog_t;
  63.  
  64. #include <xfs/xfs_log_recover.h>
  65. #include <xfs/xfs_buf_item.h>
  66. #include <xfs/xfs_inode_item.h>
  67. #include <xfs/xfs_extfree_item.h>
  68.  
  69. typedef union {
  70.     xlog_rec_header_t       hic_header;
  71.     xlog_rec_ext_header_t   hic_xheader;
  72.     char                    hic_sector[XLOG_HEADER_SIZE];
  73. } xlog_in_core_2_t;
  74.  
  75. /*
  76.  * macros mapping kernel code to user code
  77.  */
  78. #ifndef EFSCORRUPTED
  79. #define EFSCORRUPTED             990
  80. #endif
  81. #define STATIC                static
  82. #define XFS_ERROR(e)            (e)
  83. #ifdef DEBUG
  84. #define XFS_ERROR_REPORT(e,l,mp)    fprintf(stderr, "ERROR: %s\n", e)
  85. #else
  86. #define XFS_ERROR_REPORT(e,l,mp)    ((void) 0)
  87. #endif
  88. #define XFS_CORRUPTION_ERROR(e,l,mp,m)    ((void) 0)
  89. #define unlikely(x)            (x)
  90. #define min(a,b)            ((a) < (b) ? (a) : (b))
  91.  
  92. #if (__GNUC__ < 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 95))
  93. # define xlog_warn(fmt,args...) \
  94.     ( fprintf(stderr,fmt,## args), fputc('\n', stderr) )
  95. # define cmn_err(sev,fmt,args...) \
  96.     xlog_warn(fmt,## args)
  97. # define xlog_exit(fmt,args...) \
  98.     ( xlog_warn(fmt,## args), exit(1) )
  99. # define xlog_panic(fmt,args...) \
  100.     xlog_exit(fmt,## args)
  101. #else
  102. # define xlog_warn(...) \
  103.     ( fprintf(stderr,__VA_ARGS__), fputc('\n', stderr) )
  104. # define cmn_err(sev,...) \
  105.     xlog_warn(__VA_ARGS__)
  106. # define xlog_exit(...) \
  107.     ( xlog_warn(__VA_ARGS__), exit(1) )
  108. # define xlog_panic(...) \
  109.     xlog_exit(__VA_ARGS__)
  110. #endif
  111.  
  112. #define xlog_get_bp(log,bbs)    libxfs_getbuf(x.logdev, 0, (bbs))
  113. #define xlog_put_bp(bp)        libxfs_putbuf(bp)
  114. #define xlog_bread(log,blkno,bbs,bp)    \
  115.     (libxfs_readbufr(x.logdev,    \
  116.             (log)->l_logBBstart+(blkno), bp, (bbs), 1), 0)
  117. #define xlog_align(log,blkno,nbblks,bp)    XFS_BUF_PTR(bp)
  118.  
  119. #define kmem_zalloc(size, foo)            calloc(size,1)
  120. #define kmem_alloc(size, foo)            calloc(size,1)
  121. #define kmem_free(ptr, foo)            free(ptr)
  122. #define kmem_realloc(ptr, len, old, foo)    realloc(ptr, len)
  123.  
  124. /* exports */
  125. extern int    print_exit;
  126. extern int    print_skip_uuid;
  127. extern int    print_record_header;
  128.  
  129. /* libxfs parameters */
  130. extern libxfs_init_t    x;
  131.  
  132. extern int  xlog_find_zeroed(xlog_t *log, xfs_daddr_t *blk_no);
  133. extern int  xlog_find_cycle_start(xlog_t *log, xfs_buf_t *bp,
  134.         xfs_daddr_t first_blk, xfs_daddr_t *last_blk, uint cycle);
  135. extern int  xlog_find_tail(xlog_t *log, xfs_daddr_t *head_blk,
  136.         xfs_daddr_t *tail_blk, int readonly);
  137.  
  138. extern int  xlog_test_footer(xlog_t *log);
  139. extern int  xlog_recover(xlog_t *log, int readonly);
  140. extern void xlog_recover_print_data(xfs_caddr_t p, int len);
  141. extern void xlog_recover_print_logitem(xlog_recover_item_t *item);
  142. extern void xlog_recover_print_trans_head(xlog_recover_t *tr);
  143. extern int  xlog_print_find_oldest(xlog_t *log, xfs_daddr_t *last_blk);
  144.  
  145. /* for transactional view */
  146. extern void xlog_recover_print_trans_head(xlog_recover_t *tr);
  147.  
  148. extern void xlog_recover_print_trans(    xlog_recover_t        *trans,
  149.                     xlog_recover_item_t    *itemq,
  150.                     int            print);
  151.  
  152. extern int  xlog_do_recovery_pass(    xlog_t        *log,
  153.                     xfs_daddr_t    head_blk,
  154.                     xfs_daddr_t    tail_blk,
  155.                     int        pass);
  156. extern int  xlog_recover_do_trans(    xlog_t        *log,
  157.                     xlog_recover_t    *trans,
  158.                     int        pass);
  159. extern int  xlog_header_check_recover(  xfs_mount_t         *mp,
  160.                     xlog_rec_header_t   *head);
  161. extern int  xlog_header_check_mount(    xfs_mount_t         *mp,
  162.                     xlog_rec_header_t   *head);
  163.  
  164. #endif    /* LIBXLOG_H */
  165.